using System.Management.Automation;
using System.Security;

namespace PoshRabbit
{
    public interface IRabbitMQConnection
    {
        [Parameter(
            HelpMessage = "The name of the queue to create; if unspecified an anonymous queue will be created by the rabbit mq server", 
            Mandatory = true, 
            ValueFromPipelineByPropertyName = true)]
        [Alias("X")]
        [ValidateNotNullOrEmpty]
        string Exchange { get; set; }

        [Parameter(
            HelpMessage = "The name of the queue to create; if unspecified an anonymous queue will be created by the rabbit mq server", 
            Mandatory = false, 
            ValueFromPipelineByPropertyName = true)]
        [Alias("T")]
        [ValidateNotNullOrEmpty]
        string ExchangeType { get; set; }

        [Parameter(
            HelpMessage = "The name of the queue to create; if unspecified an anonymous queue will be created by the rabbit mq server", 
            Mandatory = true, 
            ValueFromPipelineByPropertyName = true)]
        [Alias("RK", "Key", "Filter")]
        [ValidateNotNullOrEmpty]
        string RoutingKey { get; set; }

        [Parameter(
            HelpMessage = "The name of the queue to create; if unspecified an anonymous queue will be created by the rabbit mq server", 
            Mandatory = false, 
            ValueFromPipelineByPropertyName = true)]
        [Alias("VHost", "VH")]
        string VirtualHost { get; set; }

        [Parameter(
            HelpMessage = "The name of the queue to create; if unspecified an anonymous queue will be created by the rabbit mq server", 
            Mandatory = true, 
            ValueFromPipelineByPropertyName = true)]
        [Alias("Host", "Server", "Svr")]
        [ValidateNotNullOrEmpty]
        string HostName { get; set; }

        [Parameter(
            HelpMessage = "The name of the queue to create; if unspecified an anonymous queue will be created by the rabbit mq server", 
            Mandatory = false, 
            ValueFromPipelineByPropertyName = true)]
        [Alias("Usr")]
        string UserName { get; set; }

        [Parameter(
            HelpMessage = "The name of the queue to create; if unspecified an anonymous queue will be created by the rabbit mq server", 
            Mandatory = false, 
            ValueFromPipelineByPropertyName = true)]
        [Alias("Pwd")]
        SecureString Password { get; set; }

        [Parameter(
            HelpMessage = "The name of the queue to create; if unspecified an anonymous queue will be created by the rabbit mq server", 
            Mandatory = false, 
            ValueFromPipelineByPropertyName = true)]
        [Alias("pcl")]
        string Protocol { get; set; }

        [Parameter(
            HelpMessage = "The name of the queue to create; if unspecified an anonymous queue will be created by the rabbit mq server",
            Mandatory = false,
            ValueFromPipelineByPropertyName = true)]
        [ValidateNotNullOrEmpty]
        string Encoding { get; set; }
    }
}